/*	--- 使用Listener --- 

除了【Servlet和Filter】外，【JavaEE的Servlet规范】还提供了【第三种组件】：【Listener】。

【Listener】顾名思义就是【监听器】，有【好几种Listener】

其中【最常用的是ServletContextListener】，我们编写一个【实现了ServletContextListener接口的类】如下： */
@WebListener
public class AppListener implements ServletContextListener {
	// 【初始化WebApp】, 例如:打开【数据库连接池】
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("WebApp initialized.");
	}

	// 在此【清理WebAp】p, 例如:关闭【数据库连接池】
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("WebApp destroyed.");
	}
}


/*
任何【标注】为【@WebListener】，且【实现了特定接口的class】, 会被【Web服务器】自动初始化。

【上述AppListener】实现了【ServletContextListener接口】，它会在【整个Web应用程序初始化完成后】，以及【Web应用程序关闭后】获得【回调通知】。

我们可以把【初始化数据库连接池】等工作, 放到【contextInitialized()回调方法】中，把【清理资源的工作】放到【contextDestroyed()回调方法】中

因为【Web服务器】保证【在contextInitialized()执行后】，才会接受【用户的HTTP请求】。

很多【第三方Web框架】都会通过【一个ServletContextListener接口】初始化【Web框架自己】。

------------------------------------------------

除了【ServletContextListener】外，还有【几种Listener】：
	· 【ServletContextListener】：监听【ServletContext请求 的 创建事件&销毁事件】；

	· 【ServletContextAttributeListener】：监听【ServletContext 的 属性变化事件】（即调用ServletContext.setAttribute()方法）；

	· 【HttpSessionListener】：监听【HttpSession 的 创建事件&销毁事件】；

	· 【ServletRequestListener】：监听【ServletRequest请求 的 创建事件&销毁事件】；

	· 【ServletRequestAttributeListener】：监听【ServletRequest请求 的 属性变化事件】（即调用ServletRequest.setAttribute()方法）；

	

==========================================================


#	ServletContext


【一个Web服务器】可以运行【一个或多个WebApp】，对于【每个WebApp】，【Web服务器】都会为其创建【一个全局唯一的ServletContext实例】。

我们在【AppListener】里面编写的【2个回调方法】, 实际上对应的就是【ServletContext实例】的【创建&销毁】： */
public void contextInitialized(ServletContextEvent sce) {
	System.out.println("WebApp initilized: ServletContext = " + sce.getServletContext());
}


/*
ServletRequest、HttpSession等很多对象也提供getServletContext()方法获取到同一个ServletContext实例。ServletContext实例最大的作用就是设置和共享全局信息。

此外，ServletContext还提供了动态添加Servlet、Filter、Listener等功能，它允许应用程序在运行期间动态添加一个组件，虽然这个功能不是很常用。



========================================================================


#	练习

使用Listener监听WebApp  */






/*=====================================================================

#	----- 使用Listener の 小结 -----

1. 通过【Listener】我们可以【监听Web应用程序的生命周期】，获取【HttpSession等 の 创建和销毁的事件】；

2. 【ServletContext】是【一个WebApp运行期 的 全局唯一实例】，可用于【设置&共享 配置信息】。


















